home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
taropyon
/
cci
/
cci.doc
< prev
next >
Wrap
Text File
|
1994-09-14
|
18KB
|
463 lines
==========================================================================
C language interpreter CCI ver.1.01a
(C) Copyright 1993, TaroPYON
==========================================================================
HEwin の各種カスタマイズ,機能拡張用に内蔵されているC言語ライクなインタ
プリタ言語,CCI のスタンドアローン版です。すなわち,HEwin からCCI 部分だけ
を取り出したものです。
現バージョンのCCI では構造体が使えませんが,言語仕様はほぼC言語と同じで
す。
ライブラリ関数として,C標準関数,グラフィック/サウンド関連の関数がたく
さん用意されています。また,HEwin ライクなGUI インターフェースをサービス関
数も用意されており,メニューやファイルダイアログも簡単に使うことができます。
**************************************************************************
☆ 収録ファイル一覧
**************************************************************************
┌───────┬───────────────────────┐
│ファイル名 │内容 │
├───────┼───────────────────────┤
│cci .doc │説明ファイル(本ファイル) │
│cci .exp │CCI 本体実行プログラム │
│cci .dll │CCI インタプリタDLL │
│regex .dll │CCI 正規表現用DLL │
├───────┼───────────────────────┤
│runcci .bat │CCI プログラム実行用バッチファイル │
├───────┼───────────────────────┤
│ccilib .h │CCI プログラム用ヘッダファイル │
│hello .c │CCI プログラムサンプル(文字列表示) │
│hello2 .c │CCI プログラムサンプル(文字列表示2) │
│itmlist .c │CCI プログラムサンプル(アイテム情報表示) │
│install .c │CCI プログラムサンプル(インストラーラー) │
│find .c │CCI プログラムサンプル(パターン検索) │
│find2 .c │CCI プログラムサンプル(パターン検索2) │
│tifload .c │CCI プログラムサンプル(TIF データ表示) │
│eupplay .c │CCI プログラムサンプル(EUP データ演奏) │
└───────┴───────────────────────┘
**************************************************************************
☆ 使用,転載,再配付について
**************************************************************************
このプログラムは著作権は放棄していません。
以下の条件に従って自由に使用してください。
1. 著作権表示を変更しないこと。
2. このプログラムを使用したことによって生じた損害はまったく保証しない。
3. 作者はこのプログラムに不備があっても,それを訂正する義務を負わない。
4. 収録されているすべてのファイルを一括して配付すること。
感想・障害報告等,作者への連絡は,
NIFTY-Serve ID:PAH01170
まで,願いします。
電子メールでのお問い合わせは返事が遅れたり,あるいは返信のメールが行かな
いこともありますので,予めご了承ください。
転載,再配付については作者の許諾を得る必要はありません。
**************************************************************************
☆ CCIとは?
**************************************************************************
CCI はC言語ライクなインタプリタ言語です。
もともとはMIYAZAKI氏が設計・開発されたもので,MIYAZAKI氏の許可をもらい
TOWNS 用に移植しました。
CCI の言語仕様はC言語とほぼ同じですが,構造体がありません。また,インタ
プリタという仕様上の制限もあります。
ライブラリ関数として,C標準関数,TOWNS のグラフィックやサウンド機能を使
うことができます。また,HEwin ライクなGUI インターフェースをサービス関数も
用意されており,メニューやファイルダイアログも簡単に使うことができます。
インタプリタといえばTOWNS ユーザーにはF-BASIC386がもっとも知られていると
思いますが,CCI はF-BASIC386とはプログラミング方法や環境はまったく異なりま
す。
CCI はプログラム内部においてインタプリタとして動作しているというだけで,
プログラミング的にはむしろコンパイラのほうに近いものとなっています。
F-BASIC ならば,プログラムが完成していない状態でもとりあえず実行(RUN )
させることができますが,CCI で作成したプログラムは動く程度には完成してい
なければ実行させることはできません。
F-BASIC は,文法的な誤りがあったとしても,誤りがある箇所の直前までは動き
ますが,CCI では文法的な誤りがあったらそのプログラムはまったく動きません。
また,CCI で作成されたプログラム動作中はエラー検出はすべてユーザー任せな
ので,誤ったプログミングをすると簡単に暴走します。
無限ループを作ってしまうと復帰する手段がありませんので,TOWNS をリセット
するしかなくなります。F-BASIC386のように [BREAK]キーを押せばいつでも止まる
とはいかないのです。
CCI はプログラムにミスがあっても「○○行にエラーがあります」という表示を
するだけで,詳しい内容などは教えてくれません。しかもその表示されているエラ
ー箇所(ソースリストの行番号)も正しいとはかぎりません(たいていはそれより
も前にエラーが発生しています)。
なげやりな言い方をすれば,「正しく動くプログラムだけが動く」という仕様な
のです。
**************************************************************************
☆ CCIの使い方
**************************************************************************
■書式
RUN386 CCI <オプション> <CCI プログラム名> [-- <パラメータ>]
<オプション>
-codeSize <n> コードサイズ指定(Kバイト単位,デフォルト
128Kバイト)
-heepSize <n> ヒープサイズ指定(Kバイト単位,デフォルト
64Kバイト)
-dspInit 画面初期化指定
このオプションを指定すると,CCI.EXP 起動後
に画面を自動的に初期化し,エラーメッセージ
はグラフィック画面に表示されます。
このオプションの指定がない場合には,画面の
初期化は行われず,エラーメッセージ表示はコ
ンソールに対して行われます。
【解説】
CCI.EXP はTownsMENU にアイテム登録するか,コマンドモード(コンソール)
からRUN386を介して起動,使用します。
CCI.EXP はCCI 用に作成されたプログラムを動作させるために必要なプログラ
ム,つまりランタイムルーチン的なものです。
CCI.EXP を使うというのは,CCI 用に作成されたプログラムを動かすことです。
よって,CCI.EXP を使う場合には,CCI 用に作成されたプログラムを予め用意し
ておかなければなりません。
<CCI プログラム名>の部分には,CCI 用に作成されたプログラムのファイル名
を指定します。拡張子.CCIは省略できます。
<オプション>はCCI.EXP の対するオプションパラメータです。-codeSize と-h
eepSizeは通常は使われることはないと思います。もし,使う機会があるとすれば,
巨大なCCI プログラムを動かす場合や,実装メモリが少ないために少しでもフリー
メモリを確保したい場合でしょう。
-dspInitは,CCI.EXP をTownsMENU やHEwin の子プロセスとして起動する場合
に指定すると便利です。通常,CCI.EXP はエラーメッセージをコンソールに出力
します。よって,TownsMENU やHEwin というコンソールのない環境でCCI.EXP を
使うと,エラーが起こった場合にエラーメッセージが表示されません。-dspInit
を指定しておくと,エラーメッセージはグラフィック画面に出力されるので,き
ちんと知ることができます。
<パラメータ>には,CCI プログラム用のパラメータを指定します。CCI プログ
ラムがパラメータを必要としない場合には,指定する必要はありません。
CCI プログラム用のパラメータを指定する場合には,「--」を必ず指定してく
ださい。
【使用例】
RUN386 CCI install
…install.cci を実行する。
RUN386 -dspInit install
…install.cci を実行する。
RUN386 find -- test.c
…find.cciを実行する。find.cciのパラメータとしてtest.cを指定
■ サンプルプログラムの使い方
CCI で作成したサンプルプログラムをいくつか収録しています。
拡張子が.Cとなっているファイルはすべてサンプルプログラムですので,CCI
プログラムを自分で作成しようと思っている方は参考にしてください。
どのプログラムもcpp (プリプロセッサ)を使わないと,実行できませんので
注意してください。
プリプロセッサcpp.exe はフリーソフトウェアコレクション6の¥TAROPYON¥
HEWIN¥CCISRC の配下に収録されています。これを複写しておいてください。
たとえば,install.c を動かすときには,まずcpp を使って変換します。
cpp -d__CCI__ install.c > install.cci
上の例の場合,変換後のファイルはinstall.cci となります。
CCI.EXP を使って実行するのは,このinstall.cci です。
これを実行するときは,コマンドモードから,
RUN386 cci install
とします。
TownsMENU にアイテム登録してから実行するときも,パラメータにはcpp で変換
したプログラムのファイル名を指定してください。ファイル名はなるべくドライブ
名とルートから指定したフルパスで指定してください。
アイテム登録時のパラメータの例: E:¥CCI¥install.cci
サンプルプログラムとして収録されているCCI プログラムの中には,コマンドモ
ードから使うことを前提に作成されているものがあります。
コマンドモード上の動作を前提に作成されたCCI プログラムをTownsMENU にアイ
テム登録するときは,アイテムの種別を「MS-DOS」に指定してください。
HEwin からCCI を使う場合には,コマンドモードでの動作を前提にしたプログラ
ムは正常に動かすことはできません。
このようにCCI プログラムを動かすときには,いったんcpp を使う必要がありま
す。このため,RUNCCI.BATというcpp を使ってからCCI.EXP を起動するバッチファ
イルも用意しました。
RUNCCI.BATを利用すると,上のinstall.cci を動かす場合には,
RUNCCI install
とすれば大丈夫です。
RUNCCI.BATをTownsMENU にアイテム登録して使うこともできます。
RUNCCIを使った場合,2番目以降のパラメータはCCI プログラムのパラメータと
なります。
たとえば,
RUNCCI find test.c
は,
RUN386 cci find -- test.c
となります。
※ RUNCCI.BAT はHEwin から利用することはできません。
●HELLO.C :"Hello, world."を表示する
hello.c は"Hello, world."という文字列を画面に表示するプログラムです。
このプログラムはコマンドモードで使ってください。
【書式】
RUNCCI hello
●HELLO2.C :"Hello, world."を表示する
hello2.cは"Hello, world."という文字列を画面に表示するプログラムです。
hello.c と違い,コマンドモードでなくとも動作します。
【書式】
RUNCCI hello2
●ITMLIST.C :アイテム登録情報表示プログラム
itmlist.c はカレントドライブ上のTMENU.ITMというファイルから,TownsMENU
のアイテム登録情報を表示するプログラムです。
このプログラムはコマンドモードで使ってください。
【書式】
RUNCCI itmlist
●INSTALL.C :インストーラーサンプル
install.c は,TownsOS V2.1用のインストーラー(インストールプログラム)
のサンプルです。
install.cci を実行すると,「CCI のインストールを行いますか?」という確認
のメッセージが表示されます。
「INSTALL : [実行]」というボタンを左クリックするとファイルダイアログが現
れますので,インストール先に移動してください。
インストール先を指定すると,<CCI> という名前のディレクトリを作成してもい
いかどうか尋ねてきます。ディレクトリを作成してもいい場合は,「MKDIR : [実
行]」 を左クリックしてください。「CANCEL : [取消]」 を左クリックすると,最
初のインストールの確認に戻ります。
ディレクトリが既に存在している場合は,ディレクトリを作成してもいいかかど
うかの確認は行われません。
次に,本当にインストールしてもいいかどうか確認してきます。ここで,「INST
ALL : [実行]」を左クリックするとインストールが開始されます。
具体的には,CCI.EXP とCCI.DOC をインストール先のディレクトリに複写します。
ファイルの複写が正常に終わると,アイテム登録が行われます。
このように,install.cci は同じinstall.cci とディレクトリ上にある,CCI.EXP
とCCI.DOC の2つのファイルをユーザーが指定したディレクトリに複写し,CCI.EXP
をTownsMENU にアイテム登録をするプログラムです(ただし,このinstall.cci は
サンプルプログラムのため,アイテム登録されたCCIを実行することはできません)。
複写するファイル名を変更すれば,他のプログラムのインストーラとして利用でき
ます。
【書式】
RUNCCI install
●FIND.C :パターン検索(コンソール用)
find.cはテキストファイルの中から,任意の検索パターンを探し,検索パターン
が見つかった行を表示するプログラムです。
検索パターンには正規表現が利用できます。
このプログラムはコマンドモードで使ってください。
【書式】
RUNCCI find <検索パターン> <ファイル名>
【使用例】
RUNCCI find buf find.c
find.cの中から,"buf" という文字列が含まれている行を表示する。
●FIND2.C :パターン検索
find2.c はテキストファイルの中から,任意の検索パターンを探し,検索パター
ンが見つかった行を表示するプログラムです。
検索パターンには,正規表現が利用できます。
起動すると,次のメニューが現れます。
(U) Upcase 大文字,小文字を区別するモードの切り換え
(P) Input pattern 検索パターンの入力
(F) Find 検索開始
まず「(U) Upcase」で,アルファベットの大文字・小文字を区別するかしないか
の動作を決めます。最初は,Upcase [off],区別するになっています。一度実行す
ると,Upcase [on] ,区別しないに切り替わります。
次に,「(P) Input pattern」 で検索パターンを入力します。
最後に,「(F) Find」を選択・実行します。実行すると,ファイルダイアログが
現れるので,検索するファイルを選択・指定してください。ファイルは複数指定で
きます。
検索が終了すると,見つかった行の一覧が表示されます。このとき,マウスの右
スイッチを押すと,最初のメニューに戻ります。
メニュー選択時にマウスの右スイッチを押すと,終了します。
【書式】
RUNCCI find2
●TIFLOAD.C :TIFFデータの表示
tifload.c はTIF 形式の画像データファイルを表示するプログラムです。
起動すると,ファイルダイアログが現れるので表示したいTIFFデータファイルを
選択・指定してください。
データは,モノクロ,16色,256 色,32768 色に対応しています。
【書式】
RUNCCI tifload
**************************************************************************
☆ 言語仕様
**************************************************************************
◎変数の型
char, short, long, int
unsigned char, unsigned short, unsigned long, unsigned int
float, double
※signed intなどは必要無いのでサポ-トしていません。
◎変数の定義
int i;
int *ip;
char buf[256];
char *buf[256];
char buf[2][5][6];
int (*func)();
などようにポインタやら配列の定義/参照ができます。
◎クラス指定
int i;
static int i;
externはありません。
◎変数の初期化
スタック変数に対しては初期化はできませんがスタテックおよびグロ-バル
デ-タは初期化可能です。
配列の場合,単純に左詰めで設定されされそのサイズのチェック及び自動割
り当ては行わられません。
char buf[] = { 1,2,3 }; /* これができません! */
さらに変数のアドレスの初期化などもできません。
int *aaa[2] = { &dum, &dum2 }; /* これも駄目! */
◎ステ-トメント
if () ... else if () ... else ...
while () ...
do ... while ();
for ( ; ; ) ...
switch() case .. default..
break;
return;
goto ... LABEL:
ほぼC言語と同じです
◎演算
(int ...) 型のキャスト
sizeof() 型のサイズ
sizeof ... 変数のサイズ(一次指定のみ)
xxx(...) 関数の呼び出し
&&, ||,
&, |, ^,
+, -, *, /, %,
>>, <<,
==, !=
<, >,
<=, >=
!, ~, -
? .. : ..
=
&=, |=, ^=,
+=, -=,
*=, /=, %=,
>>=, <<=,
++, --,
* xx, & xx
xx [ nn ]
これもほぼC言語と同じです
◎プリプロセッサ
プリプロセッサ命令は一切サポ-トしていません。
事前にcpp 等のプリプロセッサで処理しなければいけません
ただしプロプロセッサに対応したエラ-処理時のソ-ス行表示を行う為の処
理のみしています。
●注意
このインタプリタは1パスで処理しています。したがって変数および関数は
参照される前に定義が必要です
型チェックやメモリチェックなどはほとんどしていません。したがってポイ
ンタの間違った参照などで簡単に暴走します!
**************************************************************************
☆ ライブラリ関数
**************************************************************************
CCI には,C標準ライブラリにある関数や,TOWNS 用の各種ライブラリ関数が内
蔵されています。
関数については,関数一覧を参照してください。
このCCI に内蔵されているメニューやファイルダイアログ等のGUI 関連の機能は
すべて16色画面モードで動作するように作られています。32768 色と 256色といっ
た画面モードでは,これらの機能は使えませんので注意してください。
ただし,2画面合成モードで片方の画面を 32768色で使い,16色画面モードでメ
ニューやファイルダイアログを動かしたり,一時的に画面を 256色画面モードに切
り換えて使うことはできます。
**************************************************************************
☆ 最後に,
**************************************************************************
CCI のオリジナルはMIYAZAKI 氏が作成されました。
CCI の作成にあたって,は森公一郎氏の作成されたKM-yacc ver 2.0 をHigh Cで
再コンパイルしたものを利用させていただきました。
CCI の浮動小数点演算,多次元配列,その他のバグフィクスは,EAST氏によるも
のです。
MIYAZAKI氏,森公一郎氏,EAST氏にはこの場を借りてお礼申し上げます。
**************************************************************************
☆ 変更履歴
**************************************************************************
■ ver.1.01a (ver.1.01からの変更点)
・CCI インタプリタをDLL にした
・コードサイズのデフォルトを64Kから128Kバイトに増やした